package com.example.object_oriented.inherit;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 *
 * 继承就是子类继承父类的特征和行为，使得子类对象（实例）具有父类的实例域和方法，
 * 或子类从父类继承方法，使得子类具有父类相同的行为。
 * @author readpage
 * @date 2023-01-05 11:04
 */

// @EqualsAndHashCode: 自动生成hashCode() 和 equals()方法。
// @RequiredArgsConstructor: 会生成一个包含常量，和标识了NotNull的变量的构造方法
// @AllArgsConstructor: 使用后添加一个构造函数，该构造函数含有所有已声明字段属性参数
// @NoArgsConstructor: 使用后创建一个无参构造函数

@Data //@data相当于同时使用了(@ToString、@EqualsAndHashCode、@Getter、@Setter和@RequiredArgsConstructor)
@AllArgsConstructor
@NoArgsConstructor
public class Animal {
    private String name = "animal";
    private int id;

    /**
     *  使用后添加一个构造函数，该构造函数含有所有已声明字段属性参数
     */
    public void eat() {
        System.out.println(name + "正在吃");
    }

    /**
     * 睡觉方法的具体实现
     */
    public void sleep() {
        System.out.println(name + "正在睡");
    }

    public void introduction() {
        System.out.println("大家好！我是" + id + "号" + name + ".");
    }
}
